import java.sql.SQLOutput;

public class Main {
    public static void main(String[] args) {
//        System.out.println(5/2);  //2       ctr+/  怎么注释的 就怎么取消
//        System.out.println((float)5/2); //2.5
//        System.out.println(5/(float)2);//2.5
//        System.out.println((float) (5/2));//2.0

        //System.out.println(10/0);//算数异常报错

        /*    ctr+shift+/ -->块注释
        System.out.println("========");
        System.out.println(10%3); //1
        System.out.println(10%-3); //1
        System.out.println(-10%3);  //-1
        System.out.println(-10%-3); //-1
        System.out.println(11.5 % 2); //1.5   */
        /*int a = 10;
        a+=10;//a = a+10
        System.out.println(a);
        long d = 100;
        int c = 9;
        //c = c+d;
        c += d;//c = (int)(c + d) 特点：运算符会帮我们进行类型转换
        System.out.println(c);//*/

        /*int a = 10;
        //int b = ++a;//a = a+1  b=a
        int b = a++;// b=a   a = a+1
        System.out.println(a);
        System.out.println(b);*/

        /*int a = 10;
        int b = 20;
        // 注意：在Java中 = 表示赋值，要与数学中的含义区分
        // 在Java中 == 表示相等
        System.out.println(a == b); // false
        System.out.println(a != b); // true
        System.out.println(a < b); // true
        System.out.println(a > b); // false
        System.out.println(a <= b); // true
        System.out.println(a >= b); // false
        //System.out.println(3 < a < 5);*/


        /*int a = 1;
        int b = 2;
        System.out.println(a == 1 && b == 2); // 左为真 且 右为真 则结果为真
        System.out.println(a == 1 && b > 100); // 左为真 但 右为假 则结果为假
        System.out.println(a > 100 && b == 2); // 左为假 但 右为真 则结果为假
        System.out.println(a > 100 && b > 100); // 左为假 且 右为假 则结果为假
*/
        /*int a = 1;
        int b = 2;
        System.out.println(a == 1 || b == 2); // 左为真 且 右为真 则结果为真
        System.out.println(a == 1 || b > 100); // 左为真 但 右为假 则结果也为真
        System.out.println(a > 100 || b == 2); // 左为假 但 右为真 则结果也为真
        System.out.println(a > 100 || b > 100); // 左为假 且 右为假 则结果为假*/

        /*int a = 1;
        System.out.println(!(a==1));//false
        System.out.println(!(a==2));//true*/
        //当表达式1为假的时候 就不会执行表达式2了---短路与
        //System.out.println(10 > 20 && 10 / 0 == 0);
        //当表达式1为真的时候 就不会执行表达式2了---短路或
        //System.out.println(10 < 20 || 10 / 0 == 0);

        //这个不能表示短路【不建议这样写代码 这是一个特殊的例子！】
        //System.out.println(10 > 20 & 10 / 0 == 0); // 程序抛出异常
        //System.out.println(10 < 20 | 10 / 0 == 0); // 程序抛出异常
        int a = 10;
        int b = 20;
        //a > b ? a : b;
        //10;
        int c = a * (b + 4);
    }
    public static void main4(String[] args) {
        //在C语言当中  有没有字符串这种数据类型？？--无，JAVA中只有基本数据类型才有包装类

        String str = "hello";//双引号当中 包含若干的字符
        System.out.println(str);

        int a = 100;
        //调用String这个类型的方法
        String s1 = String.valueOf(a);
        System.out.println(s1);

        String s2 = a + "";//此时这个加号就是拼接的意思
        System.out.println(s2);

        String s3 = 10+20+"x";//30x

        String s4 = "x"+10+20;//x1020

        System.out.println(s3);
        System.out.println(s4);
        System.out.println("============");
        String str3 = "10009";
        //调用Integer的方法 来实现转换
        int ret = Integer.valueOf(str3);
        System.out.println(ret+1);//10010

        int ret2 = Integer.parseInt(str3);//10010
        System.out.println(ret2+1);
    }
    public static void main6(String[] args) {
        int a = 10;
        long b = 20;
        int c = (int)(a+b); // 等号的右边是long类型 左边是int类型
        long d = a+b;

        System.out.println("==========");
        //小于4个字节的内容 会 提升为int参与运算
        byte b1 = 125;
        byte b2 = 123;
        byte b3 = (byte)(b1+b2);
        System.out.println(b3);

        int b4 = b1+b2;
        System.out.println(b4);
    }

    /*public static void main5(String[] args) {
        int a = 100;
        long b = 10L;
        b = a; // a和b都是整形，a的范围小，b的范围大，当将a赋值给b时，编译器会自动将a提升为long类型，然后赋值
        a = b; // 编译报错，long的范围比int范围大，会有数据丢失，不安全
        float f = 3.14F;
        double d = 5.12;
        d = f; // 编译器会将f转换为double，然后进行赋值
        f = d; // double表示数据范围大，直接将float交给double会有数据丢失，不安全
        byte b1 = 100; // 编译通过，100没有超过byte的范围，编译器隐式将100转换为byte
        byte b2 = 257; // 编译失败，257超过了byte的数据范围，有数据丢失
    }*/

    public static void func(String[] args) {
        //C语言中0是假 非0是真   但是Java当中 真假 只有true和false
        boolean flg = true;//没有明确规定占用几个字节！
        System.out.println(flg);
        //不能和任何类型进行转换！

    }
    public static void main3(String[] args) {
        // 没有负数的！
        char ch = 'A';//2个字节 这个是和C有区别的！！
        System.out.println(ch);
        char ch2 = '高';
        System.out.println(ch2);//Character
    }
    public static void main2(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(a / b);
        //从数学上来说 就是0.5  但是此时在程序上说不能够保存小数

        //精确到小数点后XXXX位
        double num = 1.1;
        System.out.println(num * num);

        System.out.println("=====");
        //单精度的浮点类型
        float f = 12.5f;//4个字节 ！
        System.out.println(f);

        System.out.println(Double.MAX_VALUE);
        //输出的是 浮点数最小的一个非负整数！！！！
        System.out.println(Double.MIN_VALUE);

    }
    public static void main1(String[] args) {
        int a=10;
        System.out.println(a);
        System.out.println("Hello world!");
        //长整形 8个字节 -2^63~2^63-1
        long b=10L;
        System.out.println(Long.MAX_VALUE);
        System.out.println(Long.MIN_VALUE);

        short sh=100;//短整形 2个字节 -2^15~2^15-1
        System.out.println(Short.MAX_VALUE);
        System.out.println(Short.MIN_VALUE);

        byte b1=10;//字节型 1个字节 -2^7~2^7
        System.out.println(Byte.MAX_VALUE);
        System.out.println(Byte.MIN_VALUE);

        double d = 12.5;//8个字节
        System.out.println(d);
        System.out.println(Double.MAX_VALUE);
        System.out.println(Double.MIN_VALUE);

    }
}